import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};


class Solution1 {
    // 利用队列先进先出的特性
    public List<List<Integer>> levelOrder(Node root) {
        // 创建一个二维数组存储数据
        List<List<Integer>> ret = new ArrayList<>();
        if (root == null) {
            return ret;
        }
        Queue<Node> q = new LinkedList<>();
        // 队列里面添加队头元素
        q.offer(root);
        // 判断队列是否为空
        while (!q.isEmpty()) {
            // 统计队列里面现在的个数
            int n = q.size();
            List<Integer> list = new ArrayList<>();
            for (int i = 0; i < n; i++) {
                Node t = q.poll();
                list.add(t.val);
                // 添加该元素的子孩子入队
                for(Node node : t.children){
                    q.offer(node);
                }
            }
            ret.add(list);
        }
        return ret;
    }
}